// --------------------------  通用常量  ---------------------------
import {
  setPluginStorageItem,
  getPluginStorageItem,
  removePluginStorageItem,
  GetDocParamsValue,
  initDocParamsValue,
  setDocParamsValue, UploadFile, getDocSavePath, pGetValidDocTempPath,
} from "../common/common";
import {
  WPS_Enum,
  constWpsEnum,
  Enum996CodeOfficeFlag,
  EnumDocLandMode,
  EnumDocSaveFlag
} from "./enum.js"
import request from '@/config/axios'
import * as FileApi from "@/api/infra/file";


export function ribbonWpsTaName() {
  return "Wps996CodeTab"
}

/**
 * 启动WPS程序后，默认显示的工具栏选项卡为ribbon.xml中某一tab
 */
export function activeTab() {
    if (wps.ribbonUI)
        wps.ribbonUI.ActivateTab(ribbonWpsTaName());
}

export function showOATab() {
  setPluginStorageItem(constWpsEnum.Show996CodeTabDocActive, pCheckIs996CodeOffice()); //根据文件是否为OA文件来显示OA菜单
  wps.ribbonUI.Invalidate(); // 刷新Ribbon自定义按钮的状态
}



/**
 *  作用：判断当前文档是否是只读文档
 *  返回值：布尔
 */
export function pISOADocReadOnly(doc) {
  if (!doc) {
    return false;
  }
  var l_openType = GetDocParamsValue(doc, constWpsEnum.openType); // 获取OA传入的参数 openType
  if (l_openType == "") {
    return false;
  }
  try {
    if (l_openType.protectType != -1) { // -1 为未保护
      return true;
    }
  } catch (err) {
    return false;
  }
}



/**
 * 作用：判断是否是不落地文档
 * 参数：doc 文档对象
 * 返回值： 布尔值
 */
export function pIsOnlineOADoc(doc) {
  var l_LandMode = GetDocParamsValue(doc, constWpsEnum.OADocLandMode); //获取文档落地模式
  if (l_LandMode == "") { //用户本地打开的文档
    return false;
  }
  return l_LandMode == EnumDocLandMode.DLM_OnlineDoc;
}


//判断当前文档是否是OA文档
export function pCheckIs996CodeOffice() {
  var doc = wps.WpsApplication().ActiveDocument;
  if (!doc){
    return false;
  }

  let l_isOA = GetDocParamsValue(doc, constWpsEnum.is996Code);
  if (l_isOA == "") {
    return false
  };
  return l_isOA == Enum996CodeOfficeFlag.YES ? true : false;
}

/**
 * 判断WPS中的文件个数是否为0，若为0则关闭WPS函数
 * @param {*} name
 */
export function closeWpsIfNoDocument() {
  var wpsApp = wps.WpsApplication();
  var docs = wpsApp.Documents;
  if (!docs || docs.Count == 0) {
    wps.ApiEvent.Cancel = true;
    //根据业务可以选择是否退出进程 wpsApp.Quit();
    wpsApp.Quit()
  }
}


/**
 * 作用：判断文档关闭后，如果系统已经没有打开的文档了，则设置回初始用户名
 */
export function pSetWPSAppUserName() {
  //文档全部关闭的情况下，把WPS初始启动的用户名设置回去
  if (wps.WpsApplication().Documents.Count == 0) {
    let l_strUserName = getPluginStorageItem(constWpsEnum.WPSInitUserName);
    wps.WpsApplication().UserName = l_strUserName;
  }
}


export async function saveWpsToServer(l_doc,conformStr) {

  let resObj = {
    code :1,
    msg:"",
  }
  let l_UploadName =  l_doc.Name;

  let l_DocPath = l_doc.FullName; // 文件所在路径

  if (pIsOnlineOADoc(l_doc) == false) {
    //对于本地磁盘文件上传OA，先用Save方法保存后，再上传
    //设置用户保存按钮标志，避免出现禁止OA文件保存的干扰信息
    setPluginStorageItem(constWpsEnum.OADocUserSave, EnumDocSaveFlag.OADocSave);
    if (l_doc.Path == "") { //对于不落地文档，文档路径为空
      l_doc.SaveAs2(wps.Env.GetTempPath() + "/" + l_doc.Name, undefined, undefined, undefined, false);
    } else {
      l_doc.Save();
    }
    //设置用户保存按钮标志
    setPluginStorageItem(constWpsEnum.OADocUserSave, EnumDocSaveFlag.NoneOADocSave);
    //落地文档，调用UploadFile方法上传到OA后台
    l_DocPath = l_doc.FullName;
    try {
      //调用OA助手的上传方法
      let res = await UploadFile(l_UploadName, l_DocPath)
      if (res.code !== 0) {
        resObj.msg = "文件上传失败" ;
        return resObj
      }
      // let l_doc = wps.WpsApplication().ActiveDocument;

      // if (!! conformStr) {
      //   if (wps.confirm(conformStr) == false) {
      //     if (l_doc) {
      //       l_doc.Close(-1); //保存文档后关闭
      //     }
      //   }
      // }else {
      //   l_doc.Close(-1); //保存文档后关闭
      // }
      return res;
    } catch (err) {
      resObj.msg = "上传文件失败！请检查系统上传参数及网络环境！" ;
      return resObj
    }
  } else {
    resObj.msg = "在线文档，禁止修改！" ;
    return resObj
  }
}


export async function savePdfoServer(p_Doc) {

  // 先把文档输出保存为指定的文件格式，再上传到后台
  setPluginStorageItem(constWpsEnum.OADocUserSave, true); //设置一个临时变量，用于在BeforeSave事件中判断

  // var l_SourceName = p_Doc.Name;
  let l_NewName="";
  let docPath=getDocSavePath(p_Doc);
  if(docPath.indexOf("\\")>0){
    l_NewName = docPath + "\\B_" + p_Doc.Name;
  }else{
    l_NewName = docPath + "/B_" + p_Doc.Name;
  }
  // if(docPath.indexOf("\\")>0){
  //   l_SourceName = docPath + "\\" + l_SourceName;
  // }else{
  //   l_SourceName = docPath + "/" + l_SourceName;
  // }

  p_Doc.SaveAs2(l_NewName, undefined, undefined, undefined, false);
  // p_Doc.SaveAs2(l_SourceName, undefined, undefined, undefined, false);
  //以下以隐藏模式打开另一个文档
  let l_textEncoding = wps.WpsApplication().Options.DefaultTextEncoding; //默认 936
  let l_Doc = wps.WpsApplication().Documents.Open(l_NewName, false, false, false, "", "", false, "", "", 0, l_textEncoding, false);

  l_Doc.TrackRevisions = false; //关闭修订模式
  l_Doc.ShowRevisions = false; //隐含属性，隐藏修订模式
  l_Doc.AcceptAllRevisions();
  l_Doc.Save();


  let l_strPath = pGetValidDocTempPath(l_Doc) + ".pdf"; //获取有效输出路径
  wps.FileSystem.Remove(l_strPath); //先删除之前可能存在的临时文件
  l_Doc.ExportAsFixedFormat(l_strPath, wps.Enum&&wps.Enum.wdFormatPDF||17, true); //文档另存为PDF格式
  let l_strChangeFileName = l_Doc.Name.split(".")[0] + ".pdf";
  // UploadFile(l_strChangeFileName, l_strPath)
  //   .then(res => {
  //     alert("文件转格式保存成功！");
  //     wps.FileSystem.Remove(l_strPath); //上载完成后，删除临时文件
  //
  //     l_Doc.Close();
  //     wps.FileSystem.Remove(l_NewName); //删除临时文档
  //     setPluginStorageItem(constWpsEnum.OADocUserSave, false);
  //
  //   }).catch(err => {
  //   alert("文件上传失败")
  //   setPluginStorageItem(constWpsEnum.OADocUserSave, false);
  // })

  let res = await UploadFile(l_strChangeFileName, l_strPath)

  wps.FileSystem.Remove(l_strPath); //上载完成后，删除临时文件
  l_Doc.Close();
  wps.FileSystem.Remove(l_NewName); //删除临时文档

  setPluginStorageItem(constWpsEnum.OADocUserSave, false);
  if (res.code !== 0) {
    res.msg = "文件上传失败" ;
    return res
  }else {
    return res
  }
}
